home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / system / innosetup / isetup-5.1.8.exe / {app} / Examples / CodeDlg.iss < prev    next >
Text File  |  2006-10-03  |  8KB  |  205 lines

  1. ; -- CodeDlg.iss --
  2. ;
  3. ; This script shows how to insert custom wizard pages into Setup and how to handle
  4. ; these pages. Furthermore it shows how to 'communicate' between the [Code] section
  5. ; and the regular Inno Setup sections using {code:...} constants. Finally it shows
  6. ; how to customize the settings text on the 'Ready To Install' page.
  7.  
  8. [Setup]
  9. AppName=My Program
  10. AppVerName=My Program version 1.5
  11. DefaultDirName={pf}\My Program
  12. DisableProgramGroupPage=yes
  13. UninstallDisplayIcon={app}\MyProg.exe
  14. OutputDir=userdocs:Inno Setup Examples Output
  15.  
  16. [Files]
  17. Source: "MyProg.exe"; DestDir: "{app}"
  18. Source: "MyProg.chm"; DestDir: "{app}"
  19. Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
  20.  
  21. [Registry]
  22. Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
  23. Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
  24. Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Name"; ValueData: "{code:GetUser|Name}"
  25. Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Company"; ValueData: "{code:GetUser|Company}"
  26. Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "DataDir"; ValueData: "{code:GetDataDir}"
  27. ; etc.
  28.  
  29. [Dirs]
  30. Name: {code:GetDataDir}; Flags: uninsneveruninstall
  31.  
  32. [Code]
  33. var
  34.   UserPage: TInputQueryWizardPage;
  35.   UsagePage: TInputOptionWizardPage;
  36.   LightMsgPage: TOutputMsgWizardPage;
  37.   KeyPage: TInputQueryWizardPage;
  38.   ProgressPage: TOutputProgressWizardPage;
  39.   DataDirPage: TInputDirWizardPage;
  40.   
  41. procedure InitializeWizard;
  42. begin
  43.   { Create the pages }
  44.  
  45.   UserPage := CreateInputQueryPage(wpWelcome,
  46.     'Personal Information', 'Who are you?',
  47.     'Please specify your name and the company for whom you work, then click Next.');
  48.   UserPage.Add('Name:', False);
  49.   UserPage.Add('Company:', False);
  50.  
  51.   UsagePage := CreateInputOptionPage(UserPage.ID,
  52.     'Personal Information', 'How will you use My Program?',
  53.     'Please specify how you would like to use My Program, then click Next.',
  54.     True, False);
  55.   UsagePage.Add('Light mode (no ads, limited functionality)');
  56.   UsagePage.Add('Sponsored mode (with ads, full functionality)');
  57.   UsagePage.Add('Paid mode (no ads, full functionality)');
  58.  
  59.   LightMsgPage := CreateOutputMsgPage(UsagePage.ID,
  60.     'Personal Information', 'How will you use My Program?',
  61.     'Note: to enjoy all features My Program can offer and to support its development, ' +
  62.     'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' +
  63.     'in the ''Help'' menu of My Program after the installation has completed.'#13#13 +
  64.     'Click Back if you want to change your usage mode setting now, or click Next to ' +
  65.     'continue with the installation.');
  66.  
  67.   KeyPage := CreateInputQueryPage(UsagePage.ID,
  68.     'Personal Information', 'What''s your registration key?',
  69.     'Please specify your registration key and click Next to continue. If you don''t ' +
  70.     'have a valid registration key, click Back to choose a different usage mode.');
  71.   KeyPage.Add('Registration key:', False);
  72.  
  73.   ProgressPage := CreateOutputProgressPage('Personal Information',
  74.     'What''s your registration key?');
  75.  
  76.   DataDirPage := CreateInputDirPage(wpSelectDir,
  77.     'Select Personal Data Directory', 'Where should personal data files be installed?',
  78.     'Select the folder in which Setup should install personal data files, then click Next.',
  79.     False, '');
  80.   DataDirPage.Add('');
  81.  
  82.   { Set default values, using settings that were stored last time if possible }
  83.  
  84.   UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}'));
  85.   UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}'));
  86.  
  87.   case GetPreviousData('UsageMode', '') of
  88.     'light': UsagePage.SelectedValueIndex := 0;
  89.     'sponsored': UsagePage.SelectedValueIndex := 1;
  90.     'paid': UsagePage.SelectedValueIndex := 2;
  91.   else
  92.     UsagePage.SelectedValueIndex := 1;
  93.   end;
  94.  
  95.   DataDirPage.Values[0] := GetPreviousData('DataDir', '');
  96. end;
  97.  
  98. procedure RegisterPreviousData(PreviousDataKey: Integer);
  99. var
  100.   UsageMode: String;
  101. begin
  102.   { Store the settings so we can restore them next time }
  103.   SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]);
  104.   SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]);
  105.   case UsagePage.SelectedValueIndex of
  106.     0: UsageMode := 'light';
  107.     1: UsageMode := 'sponsored';
  108.     2: UsageMode := 'paid';
  109.   end;
  110.   SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);
  111.   SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
  112. end;
  113.  
  114. function ShouldSkipPage(PageID: Integer): Boolean;
  115. begin
  116.   { Skip pages that shouldn't be shown }
  117.   if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then
  118.     Result := True
  119.   else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then
  120.     Result := True
  121.   else
  122.     Result := False;
  123. end;
  124.  
  125. function NextButtonClick(CurPageID: Integer): Boolean;
  126. var
  127.   I: Integer;
  128. begin
  129.   { Validate certain pages before allowing the user to proceed }
  130.   if CurPageID = UserPage.ID then begin
  131.     if UserPage.Values[0] = '' then begin
  132.       MsgBox('You must enter your name.', mbError, MB_OK);
  133.       Result := False;
  134.     end else begin
  135.       if DataDirPage.Values[0] = '' then
  136.         DataDirPage.Values[0] := 'C:\' + UserPage.Values[0];
  137.       Result := True;
  138.     end;
  139.   end else if CurPageID = KeyPage.ID then begin
  140.     { Just to show how 'OutputProgress' pages work.
  141.       Always use a try..finally between the Show and Hide calls as shown below. }
  142.     ProgressPage.SetText('Authorizing registration key...', '');
  143.     ProgressPage.SetProgress(0, 0);
  144.     ProgressPage.Show;
  145.     try
  146.       for I := 0 to 10 do begin
  147.         ProgressPage.SetProgress(I, 10);
  148.         Sleep(100);
  149.       end;
  150.     finally
  151.       ProgressPage.Hide;
  152.     end;
  153.     if KeyPage.Values[0] = 'inno' then
  154.       Result := True
  155.     else begin
  156.       MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK);
  157.       Result := False;
  158.     end;
  159.   end else
  160.     Result := True;
  161. end;
  162.  
  163. function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
  164.   MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
  165. var
  166.   S: String;
  167. begin
  168.   { Fill the 'Ready Memo' with the normal settings and the custom settings }
  169.   S := '';
  170.   S := S + 'Personal Information:' + NewLine;
  171.   S := S + Space + UserPage.Values[0] + NewLine;
  172.   if UserPage.Values[1] <> '' then
  173.     S := S + Space + UserPage.Values[1] + NewLine;
  174.   S := S + NewLine;
  175.   
  176.   S := S + 'Usage Mode:' + NewLine + Space;
  177.   case UsagePage.SelectedValueIndex of
  178.     0: S := S + 'Light mode';
  179.     1: S := S + 'Sponsored mode';
  180.     2: S := S + 'Paid mode';
  181.   end;
  182.   S := S + NewLine + NewLine;
  183.   
  184.   S := S + MemoDirInfo + NewLine;
  185.   S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine;
  186.  
  187.   Result := S;
  188. end;
  189.  
  190. function GetUser(Param: String): String;
  191. begin
  192.   { Return a user value }
  193.   { Could also be split into separate GetUserName and GetUserCompany functions }
  194.   if Param = 'Name' then
  195.     Result := UserPage.Values[0]
  196.   else if Param = 'Company' then
  197.     Result := UserPage.Values[1];
  198. end;
  199.  
  200. function GetDataDir(Param: String): String;
  201. begin
  202.   { Return the selected DataDir }
  203.   Result := DataDirPage.Values[0];
  204. end;
  205.